home *** CD-ROM | disk | FTP | other *** search
/ BMUG Newsletter 1996 Spring / S96 NL CD.iso / New NL PD Collections / Sound Manager 3.1 / For Programmers / Interfaces / SoundInput.p < prev    next >
Encoding:
Text File  |  1995-08-24  |  10.1 KB  |  291 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        SoundInput.p
  3.  
  4.      Contains:    Sound Input Interfaces.
  5.  
  6.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  7.                  All rights reserved.
  8.  
  9.      Bugs:        Report bugs to Radar component “System Interfaces”, “Latest”
  10.  
  11. }
  12.  
  13. {$IFC UNDEFINED UsingIncludes}
  14. {$SETC UsingIncludes := 0}
  15. {$ENDC}
  16.  
  17. {$IFC NOT UsingIncludes}
  18.  UNIT SoundInput;
  19.  INTERFACE
  20. {$ENDC}
  21.  
  22. {$IFC UNDEFINED __SOUNDINPUT__}
  23. {$SETC __SOUNDINPUT__ := 1}
  24.  
  25. {$I+}
  26. {$SETC SoundInputIncludes := UsingIncludes}
  27. {$SETC UsingIncludes := 1}
  28.  
  29.  
  30. {$IFC UNDEFINED __TYPES__}
  31. {$I Types.p}
  32. {$ENDC}
  33. {    ConditionalMacros.p                                            }
  34.  
  35. {$IFC UNDEFINED __APPLEEVENTS__}
  36. {$I AppleEvents.p}
  37. {$ENDC}
  38. {    Errors.p                                                    }
  39. {    Memory.p                                                    }
  40. {        MixedMode.p                                                }
  41. {    OSUtils.p                                                    }
  42. {    Events.p                                                    }
  43. {        Quickdraw.p                                                }
  44. {            QuickdrawText.p                                        }
  45. {                ScriptLayout.p                                    }
  46. {    EPPC.p                                                        }
  47. {        AppleTalk.p                                                }
  48. {        Files.p                                                    }
  49. {            Finder.p                                            }
  50. {        PPCToolbox.p                                            }
  51. {        Processes.p                                                }
  52. {    Notification.p                                                }
  53. {        Collections.p                                            }
  54. {        Kernel.p                                                }
  55. {            MachineExceptions.p                                    }
  56. {            Timing.p                                            }
  57.  
  58. {$IFC UNDEFINED __WINDOWS__}
  59. {$I Windows.p}
  60. {$ENDC}
  61. {    Controls.p                                                    }
  62. {        Appearance.p                                            }
  63. {        TextObjects.p                                            }
  64. {            Unicode.p                                            }
  65. {        Menus.p                                                    }
  66. {    Drag.p                                                        }
  67. {        TextEdit.p                                                }
  68. {            TextServices.p                                        }
  69. {                Components.p                                    }
  70. {                LocaleObjects.p                                    }
  71.  
  72. {$IFC UNDEFINED __DIALOGS__}
  73. {$I Dialogs.p}
  74. {$ENDC}
  75.  
  76. {$IFC UNDEFINED __FILES__}
  77. {$I Files.p}
  78. {$ENDC}
  79.  
  80. {$IFC UNDEFINED __SOUND__}
  81. {$I Sound.p}
  82. {$ENDC}
  83.  
  84. {$PUSH}
  85. {$ALIGN MAC68K}
  86. {$LibExport+}
  87.  
  88. CONST
  89.     siDeviceIsConnected            = 1;                            {input device is connected and ready for input}
  90.     siDeviceNotConnected        = 0;                            {input device is not connected}
  91.     siDontKnowIfConnected        = -1;                            {can't tell if input device is connected}
  92.     siReadPermission            = 0;                            {permission passed to SPBOpenDevice}
  93.     siWritePermission            = 1;                            {permission passed to SPBOpenDevice}
  94.  
  95. {Info Selectors for Sound Input Drivers}
  96.     siActiveChannels            = 'chac';                        {active channels}
  97.     siActiveLevels                = 'lmac';                        {active meter levels}
  98.     siAGCOnOff                    = 'agc ';                        {automatic gain control state}
  99.     siAsync                        = 'asyn';                        {asynchronous capability}
  100.     siChannelAvailable            = 'chav';                        {number of channels available}
  101.     siCompressionAvailable        = 'cmav';                        {compression types available}
  102.     siCompressionFactor            = 'cmfa';                        {current compression factor}
  103.     siCompressionHeader            = 'cmhd';                        {return compression header}
  104.     siCompressionNames            = 'cnam';                        {compression type names available}
  105.     siCompressionType            = 'comp';                        {current compression type}
  106.     siContinuous                = 'cont';                        {continous recording}
  107.     siDeviceBufferInfo            = 'dbin';                        {size of interrupt buffer}
  108.     siDeviceConnected            = 'dcon';                        {input device connection status}
  109.     siDeviceIcon                = 'icon';                        {input device icon}
  110.     siDeviceName                = 'name';                        {input device name}
  111.     siHardwareBusy                = 'hwbs';                        {sound hardware is in use}
  112.     siInputGain                    = 'gain';                        {input gain}
  113.     siInputSource                = 'sour';                        {input source selector}
  114.     siInputSourceNames            = 'snam';                        {input source names}
  115.     siLevelMeterOnOff            = 'lmet';                        {level meter state}
  116.     siModemGain                    = 'mgai';                        {modem input gain}
  117.     siNumberChannels            = 'chan';                        {current number of channels}
  118.     siOptionsDialog                = 'optd';                        {display options dialog}
  119.     siPlayThruOnOff                = 'plth';                        {playthrough state}
  120.     siRecordingQuality            = 'qual';                        {recording quality}
  121.     siSampleRate                = 'srat';                        {current sample rate}
  122.     siSampleRateAvailable        = 'srav';                        {sample rates available}
  123.     siSampleSize                = 'ssiz';                        {current sample size}
  124.     siSampleSizeAvailable        = 'ssav';                        {sample sizes available}
  125.     siSetupCDAudio                = 'sucd';                        {setup sound hardware for CD audio}
  126.     siSetupModemAudio            = 'sumd';                        {setup sound hardware for modem audio}
  127.     siStereoInputGain            = 'sgai';                        {stereo input gain}
  128.     siTwosComplementOnOff        = 'twos';                        {two's complement state}
  129.     siVoxRecordInfo                = 'voxr';                        {VOX record parameters}
  130.     siVoxStopInfo                = 'voxs';                        {VOX stop parameters}
  131.     siCloseDriver                = 'clos';                        {reserved for internal use only}
  132.     siInitializeDriver            = 'init';                        {reserved for internal use only}
  133.     siPauseRecording            = 'paus';                        {reserved for internal use only}
  134.     siUserInterruptProc            = 'user';                        {reserved for internal use only}
  135. {Qualities}
  136.     siCDQuality                    = 'cd  ';                        {44.1kHz, stereo, 16 bit}
  137.     siBestQuality                = 'best';                        {22kHz, mono, 8 bit}
  138.     siBetterQuality                = 'betr';                        {22kHz, mono, MACE 3:1}
  139.     siGoodQuality                = 'good';
  140.  
  141.  
  142. TYPE
  143.     SPBPtr = ^SPB;
  144.  
  145. {user procedures called by sound input routines}
  146.     {
  147.         SIInterruptProcPtr uses register based parameters on the 68k and cannot
  148.         be written in or called from a high-level language without the help of
  149.         mixed mode or assembly glue.
  150.  
  151.         In:
  152.          => inParamPtr      A0.L
  153.          => dataBuffer      A1.L
  154.          => peakAmplitude    D0.W
  155.          => sampleSize      D1.L
  156.     }
  157.     SIInterruptProcPtr = Register68kProcPtr;  { register PROCEDURE SIInterrupt(inParamPtr: SPBPtr; dataBuffer: Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT); }
  158.     SICompletionProcPtr = ProcPtr;  { PROCEDURE SICompletion(inParamPtr: SPBPtr); }
  159.     SIInterruptUPP = UniversalProcPtr;
  160.     SICompletionUPP = UniversalProcPtr;
  161.  
  162.     SPB = RECORD
  163.         inRefNum:                LONGINT;                                {reference number of sound input device}
  164.         count:                    LONGINT;                                {number of bytes to record}
  165.         milliseconds:            LONGINT;                                {number of milliseconds to record}
  166.         bufferLength:            LONGINT;                                {length of buffer in bytes}
  167.         bufferPtr:                Ptr;                                    {buffer to store sound data in}
  168.         completionRoutine:        SICompletionUPP;                        {completion routine}
  169.         interruptRoutine:        SIInterruptUPP;                            {interrupt routine}
  170.         userLong:                LONGINT;                                {user-defined field}
  171.         error:                    OSErr;                                    {error}
  172.         unused1:                LONGINT;                                {reserved - must be zero}
  173.     END;
  174.  
  175. { SPBVersion() returns a NumVersion}
  176.  
  177. FUNCTION SPBVersion: LONGINT;
  178.     {$IFC NOT GENERATINGCFM}
  179.     INLINE $203C, $0000, $0014, $A800;
  180.     {$ENDC}
  181. FUNCTION SndRecord(filterProc: ModalFilterUPP; corner: Point; quality: OSType; VAR sndHandle: SndListHandle): OSErr;
  182.     {$IFC NOT GENERATINGCFM}
  183.     INLINE $203C, $0804, $0014, $A800;
  184.     {$ENDC}
  185. FUNCTION SndRecordToFile(filterProc: ModalFilterUPP; corner: Point; quality: OSType; fRefNum: INTEGER): OSErr;
  186.     {$IFC NOT GENERATINGCFM}
  187.     INLINE $203C, $0708, $0014, $A800;
  188.     {$ENDC}
  189. FUNCTION SPBSignInDevice(deviceRefNum: INTEGER; deviceName: ConstStr255Param): OSErr;
  190.     {$IFC NOT GENERATINGCFM}
  191.     INLINE $203C, $030C, $0014, $A800;
  192.     {$ENDC}
  193. FUNCTION SPBSignOutDevice(deviceRefNum: INTEGER): OSErr;
  194.     {$IFC NOT GENERATINGCFM}
  195.     INLINE $203C, $0110, $0014, $A800;
  196.     {$ENDC}
  197. FUNCTION SPBGetIndexedDevice(count: INTEGER; VAR deviceName: Str255; VAR deviceIconHandle: Handle): OSErr;
  198.     {$IFC NOT GENERATINGCFM}
  199.     INLINE $203C, $0514, $0014, $A800;
  200.     {$ENDC}
  201. FUNCTION SPBOpenDevice(deviceName: ConstStr255Param; permission: INTEGER; VAR inRefNum: LONGINT): OSErr;
  202.     {$IFC NOT GENERATINGCFM}
  203.     INLINE $203C, $0518, $0014, $A800;
  204.     {$ENDC}
  205. FUNCTION SPBCloseDevice(inRefNum: LONGINT): OSErr;
  206.     {$IFC NOT GENERATINGCFM}
  207.     INLINE $203C, $021C, $0014, $A800;
  208.     {$ENDC}
  209. FUNCTION SPBRecord(inParamPtr: SPBPtr; asynchFlag: BOOLEAN): OSErr;
  210.     {$IFC NOT GENERATINGCFM}
  211.     INLINE $203C, $0320, $0014, $A800;
  212.     {$ENDC}
  213. FUNCTION SPBRecordToFile(fRefNum: INTEGER; inParamPtr: SPBPtr; asynchFlag: BOOLEAN): OSErr;
  214.     {$IFC NOT GENERATINGCFM}
  215.     INLINE $203C, $0424, $0014, $A800;
  216.     {$ENDC}
  217. FUNCTION SPBPauseRecording(inRefNum: LONGINT): OSErr;
  218.     {$IFC NOT GENERATINGCFM}
  219.     INLINE $203C, $0228, $0014, $A800;
  220.     {$ENDC}
  221. FUNCTION SPBResumeRecording(inRefNum: LONGINT): OSErr;
  222.     {$IFC NOT GENERATINGCFM}
  223.     INLINE $203C, $022C, $0014, $A800;
  224.     {$ENDC}
  225. FUNCTION SPBStopRecording(inRefNum: LONGINT): OSErr;
  226.     {$IFC NOT GENERATINGCFM}
  227.     INLINE $203C, $0230, $0014, $A800;
  228.     {$ENDC}
  229. FUNCTION SPBGetRecordingStatus(inRefNum: LONGINT; VAR recordingStatus: INTEGER; VAR meterLevel: INTEGER; VAR totalSamplesToRecord: LONGINT; VAR numberOfSamplesRecorded: LONGINT; VAR totalMsecsToRecord: LONGINT; VAR numberOfMsecsRecorded: LONGINT): OSErr;
  230.     {$IFC NOT GENERATINGCFM}
  231.     INLINE $203C, $0E34, $0014, $A800;
  232.     {$ENDC}
  233. FUNCTION SPBGetDeviceInfo(inRefNum: LONGINT; infoType: OSType; infoData: UNIV Ptr): OSErr;
  234.     {$IFC NOT GENERATINGCFM}
  235.     INLINE $203C, $0638, $0014, $A800;
  236.     {$ENDC}
  237. FUNCTION SPBSetDeviceInfo(inRefNum: LONGINT; infoType: OSType; infoData: UNIV Ptr): OSErr;
  238.     {$IFC NOT GENERATINGCFM}
  239.     INLINE $203C, $063C, $0014, $A800;
  240.     {$ENDC}
  241. FUNCTION SPBMillisecondsToBytes(inRefNum: LONGINT; VAR milliseconds: LONGINT): OSErr;
  242.     {$IFC NOT GENERATINGCFM}
  243.     INLINE $203C, $0440, $0014, $A800;
  244.     {$ENDC}
  245. FUNCTION SPBBytesToMilliseconds(inRefNum: LONGINT; VAR byteCount: LONGINT): OSErr;
  246.     {$IFC NOT GENERATINGCFM}
  247.     INLINE $203C, $0444, $0014, $A800;
  248.     {$ENDC}
  249. FUNCTION SetupSndHeader(sndHandle: SndListHandle; numChannels: INTEGER; sampleRate: UnsignedFixed; sampleSize: INTEGER; compressionType: OSType; baseNote: INTEGER; numBytes: LONGINT; VAR headerLen: INTEGER): OSErr;
  250.     {$IFC NOT GENERATINGCFM}
  251.     INLINE $203C, $0D48, $0014, $A800;
  252.     {$ENDC}
  253. FUNCTION SetupAIFFHeader(fRefNum: INTEGER; numChannels: INTEGER; sampleRate: UnsignedFixed; sampleSize: INTEGER; compressionType: OSType; numBytes: LONGINT; numFrames: LONGINT): OSErr;
  254.     {$IFC NOT GENERATINGCFM}
  255.     INLINE $203C, $0B4C, $0014, $A800;
  256.     {$ENDC}
  257. CONST
  258.     uppSIInterruptProcInfo = $1C579802; { Register PROCEDURE (4 bytes in A0, 4 bytes in A1, 2 bytes in D0, 4 bytes in D1); }
  259.     uppSICompletionProcInfo = $000000C0; { PROCEDURE (4 byte param); }
  260.  
  261. FUNCTION NewSIInterruptProc(userRoutine: SIInterruptProcPtr): SIInterruptUPP;
  262.     {$IFC NOT GENERATINGCFM }
  263.     INLINE $2E9F;
  264.     {$ENDC}
  265.  
  266. FUNCTION NewSICompletionProc(userRoutine: SICompletionProcPtr): SICompletionUPP;
  267.     {$IFC NOT GENERATINGCFM }
  268.     INLINE $2E9F;
  269.     {$ENDC}
  270.  
  271. PROCEDURE CallSIInterruptProc(inParamPtr: SPBPtr; dataBuffer: Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT; userRoutine: SIInterruptUPP);
  272.     {$IFC NOT GENERATINGCFM}
  273.     {To be implemented:  Glue to move parameters into registers.}
  274.     {$ENDC}
  275.  
  276. PROCEDURE CallSICompletionProc(inParamPtr: SPBPtr; userRoutine: SICompletionUPP);
  277.     {$IFC NOT GENERATINGCFM}
  278.     INLINE $205F, $4E90;
  279.     {$ENDC}
  280.  
  281. {$ALIGN RESET}
  282. {$POP}
  283.  
  284. {$SETC UsingIncludes := SoundInputIncludes}
  285.  
  286. {$ENDC} {__SOUNDINPUT__}
  287.  
  288. {$IFC NOT UsingIncludes}
  289.  END.
  290. {$ENDC}
  291.